/***********************************************************************************
 * 文件名： cled_ctrl_static.c
 * 版本： 1
 * 说明：
 * 		彩色LED控制器。按照指令控制彩色LED做一些动作。静态定义意味着只支持1个LED，多个LED请
 *  使用 cled_ctrl 组件。
 *      在合适的地方调用 CLEDC_CtrlLoop 确保其间隔10ms左右会被执行一次，比如加入到
 *  Polsys_lite 的任务列表，如果使用的是 Polsys 就不需要再做这项工作，本文件已经创建了任务，
 *  但是需要在程序启动时调用 CLEDC_Init() 用于创建任务。
 *      通过 CLEDC_SetColor 设置颜色， CLEDC_SetAction 设置动作， CLEDC_GetAction 可以获
 *  取当前的动作，一般用来判断是否为 CLEDC_ACT_NULL ，即是否空闲。
 *      在文件 cled_ctrl_config.h 进行正确的配置。
 * 修改记录：
 * 	2021/04/21: 初版。 刘言。
***********************************************************************************/
#ifndef _CLED_CTRL_STATIC_H_
#define _CLED_CTRL_STATIC_H_


// 通过修改这里设置正确的配置头文件路径
#include "..\..\..\projects\prj\bsp\cled_ctrl_config.h"
//#include "cled_ctrl_config.h"

#include "..\..\polsys.h"

// 自定义类型

typedef enum _cled_action_t	// LED动作（状态）
{
	CLEDC_ACT_NULL,		// LED已经熄灭，没有任何动作，空闲
	CLEDC_ACT_WAIT,		// OFF后等待LED熄灭，因为PWM控制器一个周期后才会更新，这里只等待10ms
	CLEDC_ACT_ON,
	CLEDC_ACT_OFF,
	CLEDC_ACT_FLASH,
	//CLED_FAST_FLASH,
	CLEDC_ACT_GRA_ON,
	CLEDC_ACT_GRA_OFF,
	//CLEDC_ACT_ON_GRA_OFF,
	CLEDC_ACT_BREATH,
    CLEDC_ACT_GRA_COLOR,
	_CLEDC_ACT_END
}cled_action_t;


extern cled_action_t _CLEDC_Action;
extern u16 _CLEDC_ActionValue;
extern u8 _CLEDC_ColorR;
extern u8 _CLEDC_ColorG;
extern u8 _CLEDC_ColorB;

// APIs

#ifdef POLSYS_LITE
void CLEDC_CtrlLoop();
#else
void CLEDC_Init();
#endif

// 设置颜色
#define CLEDC_SetColor(u8_r, u8_g, u8_b)	\
{\
    _CLEDC_ColorR = u8_r;\
    _CLEDC_ColorG = u8_g;\
    _CLEDC_ColorB = u8_b;\
}

// 设置LED动作
// action_value - 闪烁次数、时长（单位10ms）
void CLEDC_SetAction(cled_action_t action, u16 action_value);
// #define CLEDC_SetAction(cled_action_t_action, u16_action_value) \
// {\
//     _CLEDC_Action = cled_action_t_action;\
//     _CLEDC_ActionValue = u16_action_value;\
// 	_CLEDC_EventActSetted();\
// }

// 获取当前在执行的动作
#define CLEDC_GetAction()   _CLEDC_Action

#endif
